home *** CD-ROM | disk | FTP | other *** search
/ Go64! / Go64_2002-01_2002_CSW_Side_A.d64 / 3-d rotation.txt < prev    next >
Text File  |  2023-02-26  |  16KB  |  752 lines

  1.         ; go64! tutorial on 3-d graphics
  2.         ; part 2: rotating points
  3.  
  4.         ; go64! 3d-kurs
  5.         ; teil 2: punkte rotieren
  6.  
  7.  
  8. vicbank  = %00000011; $0000-$4000
  9. v        = vicbank($03*$4000;=$0000
  10. screen   = $0400
  11. charset  = $0800
  12.  
  13. xaddlotb = $2000
  14. xaddhitb = $2080
  15. pixeltab = $2100
  16.  
  17.  
  18. basezp   = $02
  19. pointers = $00+basezp
  20. alpha    = $02+basezp
  21. beta     = $03+basezp
  22. gamma    = $04+basezp
  23. curcoord = $05+basezp
  24. crd0bufl = $06+basezp
  25. crd0bufh = $07+basezp
  26. crd1bufl = $08+basezp
  27. crd1bufh = $09+basezp
  28. sinbuflo = $0a+basezp
  29. sinbufhi = $0b+basezp
  30. cosbuflo = $0c+basezp
  31. cosbufhi = $0d+basezp
  32. rotbuflo = $0e+basezp
  33. rotbufhi = $0f+basezp
  34. fixpaccu = $10+basezp
  35. multzrpg = $13+basezp
  36. dividend = $13+basezp
  37. divisor  = $15+basezp
  38. x2dcrdfr = $18+basezp
  39. y2dcrdfr = $20+basezp
  40. z2dcrdfr = $28+basezp
  41. x2dcords = $30+basezp
  42. y2dcords = $38+basezp
  43. z2dcords = $40+basezp
  44. oldxcrds = $48+basezp
  45. oldycrds = $50+basezp
  46.  
  47.  
  48. foregndc = $01
  49. backgndc = $06
  50.  
  51. xpos     = $0c; matrix coordinates
  52. ypos     = $05; matrizenkoordinaten
  53.  
  54. alphaadd = $02; angle add values
  55. betaadd  = $07; winkeladditionswerte
  56. gammaadd = $fd
  57.  
  58.  
  59.  
  60.          *= $4000
  61.  
  62.          sei
  63.          lda #$35
  64.          sta $01
  65.          lda #<return;nmi
  66.          sta $fffa
  67.          lda #>return;nmi
  68.          sta $fffb
  69.          bit $d011
  70.          bpl *-3
  71.          bit $d011
  72.          bmi *-3
  73.          lda #$00
  74.          sta $d011
  75.          lda #backgndc
  76.          sta $d020
  77.          sta $d021
  78.  
  79.          ; build tables
  80.          ; tabellen generieren
  81.  
  82.          lda #<charset+v
  83.          ldx #>charset+v
  84.          ldy #$00
  85.          .byte $24
  86. mkxaddtb pla
  87.          sta xaddlotb,y
  88.          pha
  89.          txa
  90.          sta xaddhitb,y
  91.          iny
  92.          tya
  93.          and #%00000111
  94.          bne mkxaddtb+0
  95.          pla
  96.          clc
  97.          adc #$80
  98.          bcc *+3
  99.          inx
  100.          cpy #$80
  101.          bne mkxaddtb+1
  102.  
  103.          lda #%10000000
  104.          ldx #$00
  105. makpxltb sta pixeltab,x
  106.          tay
  107.          lsr a
  108.          tya
  109.          ror a
  110.          inx
  111.          bpl makpxltb
  112.  
  113.  
  114.          ; clear charset
  115.          ; zeichensatz loeschen
  116.  
  117.          lda #<charset+v
  118.          sta pointers+0
  119.          lda #>charset+v
  120.          sta pointers+1
  121.          lda #$00
  122.          ldx #$08
  123.          tay
  124. clearchr sta (pointers+0),y
  125.          iny
  126.          bne clearchr
  127.          inc pointers+1
  128.          dex
  129.          bne clearchr
  130.  
  131.  
  132.          ; clear screen
  133.          ; bildschirm loeschen
  134.  
  135.          lda #$00
  136.          tax
  137.          sta screen+v+$00,x
  138.          sta screen+v+$0100,x
  139.          sta screen+v+$0200,x
  140.          sta screen+v+$0300,x
  141.          inx
  142.          bne *-13
  143.  
  144.  
  145.          ; set up screen matrix
  146.          ; bildschirmmatrix bilden
  147.  
  148.          clc
  149.          lda #<xpos+(ypos*$28)+screen+v
  150.          sta pointers+0
  151.          lda #>xpos+(ypos*$28)+screen+v
  152.          sta pointers+1
  153.          ldx #$00
  154. setupscr txa
  155.          ldy #$00
  156.          sta (pointers+0),y
  157.          adc #$10
  158.          iny
  159.          cpy #$10
  160.          bne setupscr+3
  161.          lda #$27
  162.          adc pointers+0
  163.          sta pointers+0
  164.          bcc *+4
  165.          inc pointers+1
  166.          inx
  167.          cpx #$10
  168.          bne setupscr
  169.  
  170.  
  171.          ; set foreground colour
  172.          ; vordergrundfarbe setzen
  173.  
  174.          lda #foregndc
  175.          ldx #$00
  176.          sta $d800,x
  177.          sta $d900,x
  178.          sta $da00,x
  179.          sta $db00,x
  180.          inx
  181.          bne *-13
  182.  
  183.  
  184.          ; set vic registers
  185.          ; vic-register setzen
  186.  
  187.          bit $d011
  188.          bpl *-3
  189.          bit $d011
  190.          bmi *-3
  191.          lda #%00011011
  192.          sta $d011
  193.          lda #%00001000
  194.          sta $d016
  195.          lda #screen/$40.(charset/$0400)
  196.          sta $d018
  197.          lda $dd00
  198.          and #%00000011
  199.          ora #vicbank
  200.          sta $dd00
  201.  
  202.  
  203.          ; reset angles and coordinates
  204.          ; koordinaten&winkel nullsetzen
  205.  
  206.          lda #$00
  207.          ldx #numpoint-1
  208.          sta oldxcrds,x
  209.          sta oldycrds,x
  210.          dex
  211.          bpl *-5
  212.          sta alpha
  213.          sta beta
  214.          sta gamma
  215.  
  216.  
  217.          ; main loop
  218.          ; hauptschleife
  219.  
  220. mainloop ; rotate coordinates
  221.          ; koordinaten rotieren
  222.  
  223.          lda alpha
  224.          jsr getsines
  225. rotatex  stx curcoord; rotate around x
  226.                      ; um x rotieren
  227.          lda ycoords,x
  228.          sta fixpaccu+0
  229.          sta crd0bufh
  230.          lda #$00
  231.          sta fixpaccu+2
  232.          lda sinbuflo
  233.          ldx sinbufhi
  234.          jsr multiply; y * sin (alpha)
  235.          sty rotbuflo
  236.          sta rotbufhi
  237.          lda zcoords,x
  238.          sta fixpaccu+0
  239.          sta crd1bufh
  240.          lda #$00
  241.          sta fixpaccu+2
  242.          lda cosbuflo
  243.          ldx cosbufhi
  244.          jsr multiply; z * cos (alpha)
  245.          pha
  246.          tya
  247.          sec
  248.          sbc rotbuflo
  249.          sta y2dcrdfr,x
  250.          pla
  251.          sbc rotbufhi  ;y'= z*cos(alpha)
  252.          sta y2dcords,x;  - y*sin(alpha)
  253.  
  254.          lda crd1bufh
  255.          sta fixpaccu+0
  256.          lda #$00
  257.          sta fixpaccu+2
  258.          lda sinbuflo
  259.          ldx sinbufhi
  260.          jsr multiply; z * sin (alpha)
  261.          sty rotbuflo
  262.          sta rotbufhi
  263.          lda crd0bufh
  264.          sta fixpaccu+0
  265.          lda #$00
  266.          sta fixpaccu+2
  267.          lda cosbuflo
  268.          ldx cosbufhi
  269.          jsr multiply; y * cos (alpha)
  270.          pha
  271.          tya
  272.          clc
  273.          adc rotbuflo
  274.          sta z2dcrdfr,x
  275.          pla
  276.          adc rotbufhi  ;z'= y*cos(alpha)
  277.          sta z2dcords,x;  + z*sin(alpha)
  278.  
  279.          dex
  280.          bpl rotatex
  281.  
  282.  
  283.          lda beta
  284.          jsr getsines
  285. rotatey  stx curcoord; rotate around y
  286.                      ; um y rotieren
  287.          lda xcoords,x
  288.          sta fixpaccu+0
  289.          sta crd0bufh
  290.          lda #$00
  291.          sta fixpaccu+2
  292.          lda cosbuflo
  293.          ldx cosbufhi
  294.          jsr multiply; x * cos (beta)
  295.          sty rotbuflo
  296.          sta rotbufhi
  297.          lda z2dcords,x
  298.          sta fixpaccu+0
  299.          sta crd1bufh
  300.          lda z2dcrdfr,x
  301.          sta fixpaccu+2
  302.          sta crd1bufl
  303.          lda sinbuflo
  304.          ldx sinbufhi
  305.          jsr multiply; z' * sin (beta)
  306.          pha
  307.          tya
  308.          clc
  309.          adc rotbuflo
  310.          sta x2dcrdfr,x
  311.          pla
  312.          adc rotbufhi  ;x'= z'*sin(beta)
  313.          sta x2dcords,x;  + x*cos (beta)
  314.  
  315.          lda crd1bufh
  316.          sta fixpaccu+0
  317.          lda crd1bufl
  318.          sta fixpaccu+2
  319.          lda cosbuflo
  320.          ldx cosbufhi
  321.          jsr multiply; z' * cos (beta)
  322.          sty rotbuflo
  323.          sta rotbufhi
  324.          lda crd0bufh
  325.          sta fixpaccu+0
  326.          lda #$00
  327.          sta fixpaccu+2
  328.          lda sinbuflo
  329.          ldx sinbufhi
  330.          jsr multiply; x * sin (beta)
  331.          pha
  332.          tya
  333.          sec
  334.          sbc rotbuflo
  335.          sta z2dcrdfr,x
  336.          pla
  337.          sbc rotbufhi  ;z''=x*sin (beta)
  338.          sta z2dcords,x;   -z'*cos(beta)
  339.  
  340.          dex
  341.          bpl rotatey
  342.  
  343.  
  344.          lda gamma
  345.          jsr getsines
  346. rotatez  stx curcoord; rotate around z
  347.                      ; um z rotieren
  348.          lda x2dcords,x
  349.          sta fixpaccu+0
  350.          sta crd0bufh
  351.          lda x2dcrdfr,x
  352.          sta fixpaccu+2
  353.          sta crd0bufl
  354.          lda cosbuflo
  355.          ldx cosbufhi
  356.          jsr multiply; x' * cos (gamma)
  357.          sty rotbuflo
  358.          sta rotbufhi
  359.          lda y2dcords,x
  360.          sta fixpaccu+0
  361.          sta crd1bufh
  362.          lda y2dcrdfr,x
  363.          sta fixpaccu+2
  364.          sta crd1bufl
  365.          lda sinbuflo
  366.          ldx sinbufhi
  367.          jsr multiply; y' * sin (gamma)
  368.          pha
  369.          tya
  370.          clc
  371.          adc rotbuflo
  372.          sta x2dcrdfr,x
  373.          pla
  374.          adc rotbufhi; x''=y'*sin(gamma)
  375.          sta x2dcords,x;  +x'*cos(gamma)
  376.  
  377.          lda crd1bufh
  378.          sta fixpaccu+0
  379.          lda crd1bufl
  380.          sta fixpaccu+2
  381.          lda cosbuflo
  382.          ldx cosbufhi
  383.          jsr multiply; y' * cos (gamma)
  384.          sty rotbuflo
  385.          sta rotbufhi
  386.          lda crd0bufh
  387.          sta fixpaccu+0
  388.          lda crd0bufl
  389.          sta fixpaccu+2
  390.          lda sinbuflo
  391.          ldx sinbufhi
  392.          jsr multiply; x' * sin (gamma)
  393.          cpy rotbuflo
  394.          sbc rotbufhi  ;y''=x'*sin(beta)
  395.          sta y2dcords,x;   -y'*cos(beta)
  396.  
  397.          dex
  398.          bpl rotatez
  399.  
  400.  
  401.          ; convert coordinates to 2-d
  402.          ; koordinaten nach 2d wandeln
  403.  
  404.          ldx #numpoint-1
  405. convto2d ldy x2dcrdfr,x
  406.          lda x2dcords,x
  407.          jsr perspect
  408.          sta x2dcords,x
  409.          ldy z2dcrdfr,x
  410.          lda z2dcords,x
  411.          jsr perspect
  412.          sta y2dcords,x
  413.          dex
  414.          bpl convto2d
  415.  
  416.  
  417.          ; clear the old points
  418.          ; die alten punkte loeschen
  419.  
  420.          bit $d011
  421.          bpl *-3
  422.          bit $d011
  423.          bmi *-3
  424.  
  425.          lda #numpoint-1
  426. clrpoint pha
  427.          tax
  428.          lda oldxcrds,x
  429.          ldy oldycrds,x
  430.          tax
  431.          lda xaddlotb,x
  432.          sta pointers+0
  433.          lda xaddhitb,x
  434.          sta pointers+1
  435.          lda #$ff
  436.          eor pixeltab,x
  437.          and (pointers+0),y
  438.          sta (pointers+0),y
  439.          pla
  440.          sec
  441.          sbc #$01
  442.          bpl clrpoint
  443.  
  444.  
  445.          ; put the rotated points
  446.          ; die rotierten punkte setzen
  447.  
  448.          lda #numpoint-1
  449. putpoint pha
  450.          tax
  451.          lda x2dcords,x
  452.          sta oldxcrds,x
  453.          ldy y2dcords,x
  454.          sty oldycrds,x
  455.          tax
  456.          lda xaddlotb,x
  457.          sta pointers+0
  458.          lda xaddhitb,x
  459.          sta pointers+1
  460.          lda pixeltab,x
  461.          ora (pointers+0),y
  462.          sta (pointers+0),y
  463.          pla
  464.          sec
  465.          sbc #$01
  466.          bpl putpoint
  467.  
  468.  
  469.          ; advance angles
  470.          ; winkel erhoehen
  471.  
  472.          clc
  473.          lda #alphaadd
  474.          adc alpha
  475.          sta alpha
  476.          clc
  477.          lda #betaadd
  478.          adc beta
  479.          sta beta
  480.          clc
  481.          lda #gammaadd
  482.          adc gamma
  483.          sta gamma
  484.          jmp mainloop
  485.  
  486.  
  487.          ; get sine/cosine values
  488.          ; sinus-/kosinuswerte holen
  489.  
  490. getsines tax
  491.          lda sincoslo,x
  492.          sta sinbuflo
  493.          lda sincoshi,x
  494.          sta sinbufhi
  495.          clc
  496.          txa
  497.          adc #$40
  498.          tax
  499.          lda sincoslo,x
  500.          sta cosbuflo
  501.          lda sincoshi,x
  502.          sta cosbufhi
  503.          ldx #numpoint-1
  504.          rts
  505.  
  506.  
  507.          ; multiply with sin/cos
  508.          ; mit sin/cos multiplizieren
  509.  
  510. multiply ldy #$00
  511.          sty fixpaccu+$01
  512.          sty multzrpg+1
  513.          sty multzrpg+2
  514.          cpx #$00
  515.          beq *+8
  516.          clc
  517.          eor #$ff
  518.          adc #$01
  519.          dey
  520.          sta multzrpg+0
  521.          bit fixpaccu+$00
  522.          bpl *+16
  523.          sec
  524.          lda #$00
  525.          sbc fixpaccu+$02
  526.          sta fixpaccu+$02
  527.          lda #$00
  528.          sbc fixpaccu+$00
  529.          sta fixpaccu+$00
  530.          iny
  531.          sty multzrpg+3
  532.          lda #$00
  533.          ldx #$08
  534.          tay
  535. multloop lsr multzrpg+0
  536.          bcc nomultad
  537.          clc
  538.          lda fixpaccu+$02
  539.          adc multzrpg+1
  540.          sta multzrpg+1
  541.          tya
  542.          adc fixpaccu+$00
  543.          tay
  544.          lda fixpaccu+$01
  545.          adc multzrpg+2
  546.          sta multzrpg+2
  547. nomultad asl fixpaccu+$02
  548.          rol fixpaccu+$00
  549.          rol fixpaccu+$01
  550.          dex
  551.          bne multloop
  552.          ldx multzrpg+3
  553.          beq nonegrsl
  554.          tax
  555.          tya
  556.          clc
  557.          eor #$ff
  558.          adc #$01
  559.          tay
  560.          txa
  561.          eor #$ff
  562.          adc #$00
  563. nonegrsl ldx curcoord
  564.          rts
  565.  
  566.  
  567.          ;perform perspective division
  568.          ;perspektivdivision vollfuehren
  569.  
  570. perspect pha
  571.          bpl nonegcrd
  572.          pha
  573.          tya
  574.          clc
  575.          eor #$ff
  576.          adc #$01
  577.          tay
  578.          pla
  579.          eor #$ff
  580.          adc #$00
  581. nonegcrd sta dividend+0
  582.          sty dividend+1
  583.          clc
  584.          lda #$4e; only positive depth
  585.                  ;  values
  586.                  ; nur positive tiefen-
  587.                  ;  werte
  588.          adc y2dcords,x
  589.          sta divisor+0
  590.          ldy #$00
  591.          sty divisor+1
  592.          iny
  593.          sty divisor+2
  594.          sec
  595. divloop  ror divisor+0
  596.          ror divisor+1
  597.          sec
  598.          lda dividend+1
  599.          sbc divisor+1
  600.          tay
  601.          lda dividend+0
  602.          sbc divisor+0
  603.          bcc *+6
  604.          sta dividend+0
  605.          sty dividend+1
  606.          rol divisor+2
  607.          bcc divloop
  608.          pla
  609.          asl a
  610.          lda divisor+2
  611.          bcc *+4
  612.          eor #$ff
  613.          adc #$40;origin is at ($40;$40)
  614.                  ;ursprung bei ($40;$40)
  615.          rts
  616.  
  617. nmi      rti
  618.  
  619.  
  620.          ; point coordinates
  621.          ; punktkoordinaten
  622.  
  623. xcoords  .byte $d4,$2c,$d4,$2c
  624.          .byte $d4,$2c,$d4,$2c
  625.  
  626. ycoords  .byte $d4,$d4,$2c,$2c
  627.          .byte $d4,$d4,$2c,$2c
  628.  
  629. zcoords  .byte $d4,$d4,$d4,$d4
  630.          .byte $2c,$2c,$2c,$2c
  631.  
  632.  
  633.          ; sine/cosine table
  634.          ; sinus-/kosinustabelle
  635.  
  636.          *= *&$ff00+$0100
  637. sincoslo .byte $00,$06,$0d,$13,$19,$1f
  638.          .byte $25,$2c,$32,$38,$3e,$44
  639.          .byte $4a,$50,$56,$5c,$62,$67
  640.          .byte $6d,$73,$78,$7e,$83,$88
  641.          .byte $8e,$93,$98,$9d,$a2,$a7
  642.          .byte $ab,$b0,$b4,$b9,$bd,$c1
  643.          .byte $c5,$c9,$cd,$d0,$d4,$d7
  644.          .byte $db,$de,$e1,$e4,$e7,$e9
  645.          .byte $ec,$ee,$f0,$f2,$f4,$f6
  646.          .byte $f7,$f9,$fa,$fb,$fc,$fd
  647.          .byte $fe,$fe,$ff,$ff,$ff,$ff
  648.          .byte $ff,$fe,$fe,$fd,$fc,$fb
  649.          .byte $fa,$f9,$f7,$f6,$f4,$f2
  650.          .byte $f0,$ee,$ec,$e9,$e7,$e4
  651.          .byte $e1,$de,$db,$d7,$d4,$d0
  652.          .byte $cd,$c9,$c5,$c1,$bd,$b9
  653.          .byte $b4,$b0,$ab,$a7,$a2,$9d
  654.          .byte $98,$93,$8e,$88,$83,$7e
  655.          .byte $78,$73,$6d,$67,$62,$5c
  656.          .byte $56,$50,$4a,$44,$3e,$38
  657.          .byte $32,$2c,$25,$1f,$19,$13
  658.          .byte $0d,$06,$00,$fa,$f3,$ed
  659.          .byte $e7,$e1,$db,$d4,$ce,$c8
  660.          .byte $c2,$bc,$b6,$b0,$aa,$a4
  661.          .byte $9e,$99,$93,$8d,$88,$82
  662.          .byte $7d,$78,$72,$6d,$68,$63
  663.          .byte $5e,$59,$55,$50,$4c,$47
  664.          .byte $43,$3f,$3b,$37,$33,$30
  665.          .byte $2c,$29,$25,$22,$1f,$1c
  666.          .byte $19,$17,$14,$12,$10,$0e
  667.          .byte $0c,$0a,$09,$07,$06,$05
  668.          .byte $04,$03,$02,$02,$01,$01
  669.          .byte $01,$01,$01,$02,$02,$03
  670.          .byte $04,$05,$06,$07,$09,$0a
  671.          .byte $0c,$0e,$10,$12,$14,$17
  672.          .byte $19,$1c,$1f,$22,$25,$29
  673.          .byte $2c,$30,$33,$37,$3b,$3f
  674.          .byte $43,$47,$4c,$50,$55,$59
  675.          .byte $5e,$63,$68,$6d,$72,$78
  676.          .byte $7d,$82,$88,$8d,$93,$99
  677.          .byte $9e,$a4,$aa,$b0,$b6,$bc
  678.          .byte $c2,$c8,$ce,$d4,$db,$e1
  679.          .byte $e7,$ed,$f3,$fa
  680. sincoshi .byte $00,$00,$00,$00,$00,$00
  681.          .byte $00,$00,$00,$00,$00,$00
  682.          .byte $00,$00,$00,$00,$00,$00
  683.          .byte $00,$00,$00,$00,$00,$00
  684.          .byte $00,$00,$00,$00,$00,$00
  685.          .byte $00,$00,$00,$00,$00,$00
  686.          .byte $00,$00,$00,$00,$00,$00
  687.          .byte $00,$00,$00,$00,$00,$00
  688.          .byte $00,$00,$00,$00,$00,$00
  689.          .byte $00,$00,$00,$00,$00,$00
  690.          .byte $00,$00,$00,$00,$00,$00
  691.          .byte $00,$00,$00,$00,$00,$00
  692.          .byte $00,$00,$00,$00,$00,$00
  693.          .byte $00,$00,$00,$00,$00,$00
  694.          .byte $00,$00,$00,$00,$00,$00
  695.          .byte $00,$00,$00,$00,$00,$00
  696.          .byte $00,$00,$00,$00,$00,$00
  697.          .byte $00,$00,$00,$00,$00,$00
  698.          .byte $00,$00,$00,$00,$00,$00
  699.          .byte $00,$00,$00,$00,$00,$00
  700.          .byte $00,$00,$00,$00,$00,$00
  701.          .byte $00,$00,$00,$ff,$ff,$ff
  702.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  703.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  704.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  705.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  706.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  707.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  708.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  709.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  710.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  711.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  712.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  713.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  714.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  715.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  716.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  717.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  718.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  719.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  720.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  721.          .byte $ff,$ff,$ff,$ff,$ff,$ff
  722.          .byte $ff,$ff,$ff,$ff
  723.  
  724. numpoint = ycoords-xcoords
  725.  
  726.  
  727. return   sei
  728.          lda #$37
  729.          sta $01
  730.          ldx #$ff
  731.          txs
  732.          jsr $fda3
  733.          lda #$00
  734.          tay
  735.          sta $02,y
  736.          iny
  737.          bne *-4
  738.          ldx #$3c
  739.          ldy #$03
  740.          stx $b2
  741.          sty $b3
  742.          ldx #$00
  743.          ldy #$a0
  744.          jsr $fd8c
  745.          jsr $fd15
  746.          jsr $ff5b
  747.          jsr $e3bf
  748.          lda #$08
  749.          sta $ba
  750.          jmp $9000
  751.  
  752.